package com.bbva.itradecomex.controller.vistaCliente;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.ComponentSystemEvent;

import org.apache.log4j.Logger;
import org.primefaces.event.DateSelectEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.jsf.FacesContextUtils;

import com.bbva.itradecomex.bo.iface.RelacionPaisesBO;
import com.bbva.itradecomex.controller.ComunController;
import com.bbva.itradecomex.domain.ClienteRelacionPaisResultado;
import com.bbva.itradecomex.form.RelacionPaisBusquedaForm;
import com.bbva.itradecomex.util.Constantes;
import com.bbva.itradecomex.util.ITradexUtil;
import com.bbva.itradecomex.util.MessageProvider;


@Controller
@RequestScoped
@ManagedBean
public class RelacionPaisesController {
	private static final Logger log = Logger.getLogger(RelacionPaisesController.class);
	@Autowired
	RelacionPaisesBO relacionPaisesBO;
	
	private List<ClienteRelacionPaisResultado> listaCPaisResultadoImportaciones;
	private List<ClienteRelacionPaisResultado> listaCPaisResultadoExportaciones;
	private List<ClienteRelacionPaisResultado> listaCPaisResultadoImpoExpo;
	
	ClienteRelacionPaisResultado subTotalPaisConClaveImp;
	ClienteRelacionPaisResultado subTotalPaisSinClaveImp;
	ClienteRelacionPaisResultado totalPaisImp;
	
	ClienteRelacionPaisResultado subTotalPaisConClaveExp;
	ClienteRelacionPaisResultado subTotalPaisSinClaveExp;
	ClienteRelacionPaisResultado totalPaisExp;
	
	ClienteRelacionPaisResultado subTotalPaisConClaveImpExp;
	ClienteRelacionPaisResultado subTotalPaisSinClaveImpExp;
	ClienteRelacionPaisResultado totalPaisImpExp;

	RelacionPaisBusquedaForm busquedaForm;
	Integer idxTabResult;
	public void onPageLoad(ComponentSystemEvent event){
		try {
			if(!FacesContext.getCurrentInstance().isPostback()){
				//Limpiar
				System.out.println("ingres a !isPostBack...");
				this.listaCPaisResultadoImportaciones=null;
				this.listaCPaisResultadoExportaciones=null;
				this.listaCPaisResultadoImpoExpo=null;
				this.subTotalPaisConClaveImp = null;
				this.subTotalPaisSinClaveImp=null;
				this.totalPaisImp=null;
				
				this.subTotalPaisConClaveExp=null;
				this.subTotalPaisSinClaveExp=null;
				this.totalPaisExp=null;
				
				this.subTotalPaisConClaveImpExp=null;
				this.subTotalPaisSinClaveImpExp=null;
				this.totalPaisImpExp=null;
				busquedaForm = new RelacionPaisBusquedaForm();
				
				Calendar cal = Calendar.getInstance();
				cal.set(Calendar.YEAR, cal.get(Calendar.YEAR));
				cal.set(Calendar.MONTH, 0);
				cal.set(Calendar.DAY_OF_MONTH, 1);
				busquedaForm.setDtFechaIni(cal.getTime());
				busquedaForm.setDtFechaFin(Calendar.getInstance().getTime());
				
				this.cargarDatos();
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e.getMessage(),e);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
					MessageProvider.getInstance().getValue("MSG_ERROR_TITLE_GENERAL"),
					MessageProvider.getInstance().getValue("MSG_ERROR_DESCRIP_GENERAL")));
		}
	}
	public void validaRangoFechas(DateSelectEvent event) { 
		if(ITradexUtil.esFecha1MayorFecha2(this.getBusquedaForm().getDtFechaIni(), this.getBusquedaForm().getDtFechaFin())){
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
					MessageProvider.getInstance().getValue("MSG_ERROR_TITLE_VALIDA_FECHA"),
					MessageProvider.getInstance().getValue("MSG_ERROR_DESCRIP_VALIDA_FECHA")));
		}
    }

	public void validateDateChange(AjaxBehaviorEvent event){
		if(ITradexUtil.esFecha1MayorFecha2(this.getBusquedaForm().getDtFechaIni(), this.getBusquedaForm().getDtFechaFin())){
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
					MessageProvider.getInstance().getValue("MSG_ERROR_TITLE_VALIDA_FECHA"),
					MessageProvider.getInstance().getValue("MSG_ERROR_DESCRIP_VALIDA_FECHA")));
		}
	}
	public void cargarDatos() throws Exception{
		ComunController comunController = (ComunController)FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance())
				.getBean("comunController");
		comunController.inicializarValores();
		comunController.cargarExclusividadAladi();
		comunController.cargarExclusividadBancos();
		comunController.cargarExclusividadBancosClave();
	}
	
	public String exportPDFRelacionPaises(){
		try {
			
			switch(idxTabResult){//IDX TABULADOR
				case 0://IMPORTACIONES
					relacionPaisesBO.generaPDFRankingPais(Constantes.TIPO_IMPORTACION_VAL, FacesContext.getCurrentInstance(), this.getListaCPaisResultadoImportaciones(), this.getBusquedaForm(),this.getSubTotalPaisConClaveImp(),this.getSubTotalPaisSinClaveImp(), this.getTotalPaisImp(),Constantes.TIPO_ARCHIVO_EXPORTACION_PDF);
				case 1://EXPORTACIONES
					relacionPaisesBO.generaPDFRankingPais(Constantes.TIPO_EXPORTACION_VAL, FacesContext.getCurrentInstance(), this.getListaCPaisResultadoExportaciones(), this.getBusquedaForm(),this.getSubTotalPaisConClaveExp(),this.getSubTotalPaisSinClaveExp(), this.getTotalPaisExp(),Constantes.TIPO_ARCHIVO_EXPORTACION_PDF);
				case 2://IMPORTACIONES Y EXPORTACIONES
					relacionPaisesBO.generaPDFRankingPais(Constantes.TIPO_IMPOEXPO_VAL, FacesContext.getCurrentInstance(), this.getListaCPaisResultadoImpoExpo(), this.getBusquedaForm(),this.getSubTotalPaisConClaveImpExp(),this.getSubTotalPaisSinClaveImpExp(), this.getTotalPaisImpExp(),Constantes.TIPO_ARCHIVO_EXPORTACION_PDF);
			}
		} catch (Exception e1) {
			e1.printStackTrace();
			log.error(e1.getMessage(),e1);
		}
		return null;
	}
	public String exportXLSRelacionPaises(){
		try {
			
			switch(idxTabResult){//IDX TABULADOR
				case 0://IMPORTACIONES
					relacionPaisesBO.generaPDFRankingPais(Constantes.TIPO_IMPORTACION_VAL, FacesContext.getCurrentInstance(), this.getListaCPaisResultadoImportaciones(), this.getBusquedaForm(),this.getSubTotalPaisConClaveImp(),this.getSubTotalPaisSinClaveImp(), this.getTotalPaisImp(),Constantes.TIPO_ARCHIVO_EXPORTACION_XLS);
				case 1://EXPORTACIONES
					relacionPaisesBO.generaPDFRankingPais(Constantes.TIPO_EXPORTACION_VAL, FacesContext.getCurrentInstance(), this.getListaCPaisResultadoExportaciones(), this.getBusquedaForm(),this.getSubTotalPaisConClaveExp(),this.getSubTotalPaisSinClaveExp(), this.getTotalPaisExp(),Constantes.TIPO_ARCHIVO_EXPORTACION_XLS);
				case 2://IMPORTACIONES Y EXPORTACIONES
					relacionPaisesBO.generaPDFRankingPais(Constantes.TIPO_IMPOEXPO_VAL, FacesContext.getCurrentInstance(), this.getListaCPaisResultadoImpoExpo(), this.getBusquedaForm(),this.getSubTotalPaisConClaveImpExp(),this.getSubTotalPaisSinClaveImpExp(), this.getTotalPaisImpExp(),Constantes.TIPO_ARCHIVO_EXPORTACION_XLS);
			}
		} catch (Exception e1) {
			e1.printStackTrace();
			log.error(e1.getMessage(),e1);
		}
		return null;
	}
	
	public void buscarRelacionPaises(ActionEvent event){
		try {
			if(ITradexUtil.esFecha1MayorFecha2(this.getBusquedaForm().getDtFechaIni(), this.getBusquedaForm().getDtFechaFin())){
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
						MessageProvider.getInstance().getValue("MSG_ERROR_TITLE_VALIDA_FECHA"),
						MessageProvider.getInstance().getValue("MSG_ERROR_DESCRIP_VALIDA_FECHA")));
				return;
			}
			ComunController comunController = (ComunController)FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance())
					.getBean("comunController");
			if(comunController.getPaisSeleccionado()!=null){
				this.getBusquedaForm().setStrDescPais(comunController.getPaisSeleccionado().getDescripcion());
				this.getBusquedaForm().setStrCodPais(comunController.getPaisSeleccionado().getCodPais());
				
			}	
			if(comunController.getExclusivBancoSeleccionado()!=null){
				this.getBusquedaForm().setStrExcluGrupo(comunController.getExclusivBancoSeleccionado().getDescripcion());
				this.getBusquedaForm().setStrCodExcluGrupo(comunController.getExclusivBancoSeleccionado().getValor1());
			}
			if(comunController.getExclusivBancoClaveSeleccionado()!=null){
				this.getBusquedaForm().setStrExcluClave(comunController.getExclusivBancoClaveSeleccionado().getDescripcion());
				this.getBusquedaForm().setStrCodExcluClave(comunController.getExclusivBancoClaveSeleccionado().getValor1());
			}
			if(comunController.getExclusivAladiSeleccionado()!=null){
				this.getBusquedaForm().setStrExcluOpera(comunController.getExclusivAladiSeleccionado().getDescripcion());
				this.getBusquedaForm().setStrCodExcluOpera(comunController.getExclusivAladiSeleccionado().getValor1());
			}
			BusquedaClienteController busquedaClienteController = (BusquedaClienteController)FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance())
					.getBean("busquedaClienteController");
			
			if(busquedaClienteController.getClienteSeleccionado()!=null){
				this.getBusquedaForm().setStrCodCliente(busquedaClienteController.getClienteSeleccionado().getStrCodCliente());
				this.getBusquedaForm().setClienteDatos(busquedaClienteController.getClienteSeleccionado());
			}
			
			switch(idxTabResult){//IDX TABULADOR
				case 0://IMPORTACIONES
					this.setListaCPaisResultadoImportaciones(relacionPaisesBO.getListRankingPaisImport(this.getBusquedaForm()));
					//Importaciones
					subTotalPaisConClaveImp = (new ClienteRelacionPaisResultado("", "", new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0)));
					subTotalPaisSinClaveImp = (new ClienteRelacionPaisResultado("", "", new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0)));
					totalPaisImp = (new ClienteRelacionPaisResultado("", "", new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0)));
					relacionPaisesBO.setearTotales(subTotalPaisConClaveImp,subTotalPaisSinClaveImp,totalPaisImp,this.getListaCPaisResultadoImportaciones());
					break;
				case 1://EXPORTACIONES
					this.setListaCPaisResultadoExportaciones(relacionPaisesBO.getListRankingPaisExport(this.getBusquedaForm()));
					// Exportaciones
					subTotalPaisConClaveExp = (new ClienteRelacionPaisResultado("", "", new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0)));
					subTotalPaisSinClaveExp = (new ClienteRelacionPaisResultado("", "", new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0)));
					totalPaisExp = (new ClienteRelacionPaisResultado("", "", new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0)));
					relacionPaisesBO.setearTotales(subTotalPaisConClaveExp,subTotalPaisSinClaveExp,totalPaisExp,this.getListaCPaisResultadoExportaciones());
					break;
				case 2://IMPORTACIONES Y EXPORTACIONES
					this.setListaCPaisResultadoImpoExpo(relacionPaisesBO.getListRankingPaisImpExp(this.getBusquedaForm()));
					// Importaciones-Exportaciones
					subTotalPaisConClaveImpExp = (new ClienteRelacionPaisResultado("", "", new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0)));
					subTotalPaisSinClaveImpExp = (new ClienteRelacionPaisResultado("", "", new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0)));
					totalPaisImpExp = (new ClienteRelacionPaisResultado("", "", new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0),new BigDecimal(0)));
					relacionPaisesBO.setearTotales(subTotalPaisConClaveImpExp,subTotalPaisSinClaveImpExp,totalPaisImpExp,this.getListaCPaisResultadoImpoExpo());
					break;
			}
						
						

		} catch (Exception e) {
			e.printStackTrace();
			log.error(e.getMessage(),e);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
					MessageProvider.getInstance().getValue("MSG_ERROR_TITLE_GENERAL"),
					MessageProvider.getInstance().getValue("MSG_ERROR_DESCRIP_GENERAL")));
		}
	}


	public List<ClienteRelacionPaisResultado> getListaCPaisResultadoImportaciones() {
		return listaCPaisResultadoImportaciones;
	}


	public void setListaCPaisResultadoImportaciones(
			List<ClienteRelacionPaisResultado> listaCPaisResultadoImportaciones) {
		this.listaCPaisResultadoImportaciones = listaCPaisResultadoImportaciones;
	}


	public List<ClienteRelacionPaisResultado> getListaCPaisResultadoExportaciones() {
		return listaCPaisResultadoExportaciones;
	}


	public void setListaCPaisResultadoExportaciones(
			List<ClienteRelacionPaisResultado> listaCPaisResultadoExportaciones) {
		this.listaCPaisResultadoExportaciones = listaCPaisResultadoExportaciones;
	}


	public List<ClienteRelacionPaisResultado> getListaCPaisResultadoImpoExpo() {
		return listaCPaisResultadoImpoExpo;
	}


	public void setListaCPaisResultadoImpoExpo(
			List<ClienteRelacionPaisResultado> listaCPaisResultadoImpoExpo) {
		this.listaCPaisResultadoImpoExpo = listaCPaisResultadoImpoExpo;
	}


	public ClienteRelacionPaisResultado getSubTotalPaisConClaveImp() {
		return subTotalPaisConClaveImp;
	}


	public void setSubTotalPaisConClaveImp(
			ClienteRelacionPaisResultado subTotalPaisConClaveImp) {
		this.subTotalPaisConClaveImp = subTotalPaisConClaveImp;
	}


	public ClienteRelacionPaisResultado getSubTotalPaisSinClaveImp() {
		return subTotalPaisSinClaveImp;
	}


	public void setSubTotalPaisSinClaveImp(
			ClienteRelacionPaisResultado subTotalPaisSinClaveImp) {
		this.subTotalPaisSinClaveImp = subTotalPaisSinClaveImp;
	}


	public ClienteRelacionPaisResultado getTotalPaisImp() {
		return totalPaisImp;
	}


	public void setTotalPaisImp(ClienteRelacionPaisResultado totalPaisImp) {
		this.totalPaisImp = totalPaisImp;
	}


	public ClienteRelacionPaisResultado getSubTotalPaisConClaveExp() {
		return subTotalPaisConClaveExp;
	}


	public void setSubTotalPaisConClaveExp(
			ClienteRelacionPaisResultado subTotalPaisConClaveExp) {
		this.subTotalPaisConClaveExp = subTotalPaisConClaveExp;
	}


	public ClienteRelacionPaisResultado getSubTotalPaisSinClaveExp() {
		return subTotalPaisSinClaveExp;
	}


	public void setSubTotalPaisSinClaveExp(
			ClienteRelacionPaisResultado subTotalPaisSinClaveExp) {
		this.subTotalPaisSinClaveExp = subTotalPaisSinClaveExp;
	}


	public ClienteRelacionPaisResultado getTotalPaisExp() {
		return totalPaisExp;
	}


	public void setTotalPaisExp(ClienteRelacionPaisResultado totalPaisExp) {
		this.totalPaisExp = totalPaisExp;
	}


	public ClienteRelacionPaisResultado getSubTotalPaisConClaveImpExp() {
		return subTotalPaisConClaveImpExp;
	}


	public void setSubTotalPaisConClaveImpExp(
			ClienteRelacionPaisResultado subTotalPaisConClaveImpExp) {
		this.subTotalPaisConClaveImpExp = subTotalPaisConClaveImpExp;
	}


	public ClienteRelacionPaisResultado getSubTotalPaisSinClaveImpExp() {
		return subTotalPaisSinClaveImpExp;
	}


	public void setSubTotalPaisSinClaveImpExp(
			ClienteRelacionPaisResultado subTotalPaisSinClaveImpExp) {
		this.subTotalPaisSinClaveImpExp = subTotalPaisSinClaveImpExp;
	}


	public ClienteRelacionPaisResultado getTotalPaisImpExp() {
		return totalPaisImpExp;
	}


	public void setTotalPaisImpExp(ClienteRelacionPaisResultado totalPaisImpExp) {
		this.totalPaisImpExp = totalPaisImpExp;
	}
	public RelacionPaisBusquedaForm getBusquedaForm() {
		return busquedaForm;
	}
	public void setBusquedaForm(RelacionPaisBusquedaForm busquedaForm) {
		this.busquedaForm = busquedaForm;
	}
	public Integer getIdxTabResult() {
		return idxTabResult;
	}
	public void setIdxTabResult(Integer idxTabResult) {
		this.idxTabResult = idxTabResult;
	}
	
	
}
